package com.aisile.crowd_funding.system.controller;

import com.aisile.crowd_funding.common.utils.R;
import com.aisile.crowd_funding.system.pojo.SysMenu;
import com.aisile.crowd_funding.system.pojo.SysMenuExample;
import com.aisile.crowd_funding.system.service.MenuService;
import javafx.scene.Parent;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.List;

/**
 * @标题 MenuController
 * @作者 Mr.chen
 * @创建日期 2018/12/6 13:54
 * @版本号 1.0
 **/
@Controller
@RequestMapping("sys/menu")
public class MenuController {

    public static final String VIEW_PATH = "system/menu/";

    @Autowired
    MenuService service;

    /**
     * 跳转菜单页面
     *
     * @return
     */
    @RequestMapping
    public String menu() {
        return VIEW_PATH + "menu";
    }

    /**
     * 查询 菜单列表
     *
     * @return
     */
    @RequestMapping("list")
    @ResponseBody
    public List<SysMenu> list() {
        return service.selectByExample(null);
    }

    /**
     * 跳转添加页面
     *
     * @return
     */
    @RequestMapping("add")
    public String add(@RequestParam(value = "parentId", defaultValue = "0") Long parantId, Model model) {
        if (parantId == 0) {
            model.addAttribute("pName", "根目录");
        } else {
            //传id是判断添加的是第几级
            SysMenu menu = service.selectByPrimaryKey(parantId);
            model.addAttribute("pName", menu.getName());
        }
        //添加内容，传id是判断你添加的内容在第几级（有id）下添加
        model.addAttribute("parentId", parantId);
        return VIEW_PATH + "add";
    }


    /**
     * 保存菜单
     *
     * @param sysMenu
     * @return
     */
    @RequestMapping("save")
    @ResponseBody
    public R save(SysMenu sysMenu) {
        int i = service.insert(sysMenu);
        if (i > 0) {
            return R.ok();
        }
        return R.error();
    }

    /***
     *
     * 删除
     * @param menuId
     * @return
     */
    @ResponseBody
    @RequestMapping("del")
    public R del(Long menuId) {
        //计算节点数
        int i = service.selectChildCount(menuId);
        System.out.println(i);
        if (i > 0) {
            //有子节点
            return R.error("请先删除子节点");
        } else {
            //判断成功与否
            int i1 = service.deleteByPrimaryKey(menuId);
            if (i1 > 0) {
                return R.ok();
            }
            return R.error();
        }

    }

    /***
     * 回显
     */
    @RequestMapping("edit")
    public String edit(Long menuId, Model model) {
        //查询对象
        SysMenu menu = service.selectByPrimaryKey(menuId);
        //父结点id，名称为“根目录”
        if (menu.getParentId() == 0) {
            model.addAttribute("pName", "根目录");
        } else {
            //通过父结点查询名称
            SysMenu sysMenu = service.selectByPrimaryKey(menu.getParentId());
            //添加到model中，获取相对应的名称
            model.addAttribute("pName", sysMenu.getName());
        }
        //添加到对象里
        model.addAttribute("menu", menu);
        return VIEW_PATH + "edit";
    }


    /**
     * 修改菜单
     *
     * @param sysMenu
     * @return
     */
    @RequestMapping("update")
    @ResponseBody
    public R update(SysMenu sysMenu) {
        int i = service.updateByPrimaryKey(sysMenu);
        if (i > 0) {
            return R.ok();
        }
        return R.error();
    }
}